#include <stdio.h>
#include "prime_enum.h"

/*
 * 判断一个整数是否为素数
 * 参数：
 *   n - 要判断的整数
 * 返回值：
 *   如果是素数返回 1，否则返回 0
 */
int is_prime(int n) {
    if (n < 2) return 0;

    /* 从 2 到 sqrt(n) 判断是否能整除 */
    for (int i = 2; i * i <= n; ++i) {
        if (n % i == 0)
            return 0;
    }

    return 1;
}

/*
 * 打印小于等于 n 的所有素数，按照每行最多 10 个的格式输出
 * 参数：
 *   n - 用户输入的上限值，范围应在 [2, 1000]
 */
void print_primes(int n) {
    if (n < 2 || n > 1000) {
        printf("Output:\nError! Please enter a number between 2 and 1000.\n");
        return;
    }

    printf("Output:\n");
    int count = 0;

    for (int i = 2; i <= n; ++i) {
        if (is_prime(i)) {
            /* %4d 表示宽度为 4 的整数，右对齐，保持列整齐 */
            printf("%4d", i);
            count++;

            /* 每 10 个换一行 */
            if (count % 10 == 0)
                printf("\n");
        }
    }

    /* 如果最后一行没满 10 个，补一个换行 */
    if (count % 10 != 0) {
        printf("\n");
    }
    return;
}
